/* ************************************************************************
> File Name:     3.c
> Author:        zhfu
> mail:          3346897597@qq.com
> Created Time:  2022年04月26日 星期二 20时17分46秒
> Description:   
 ************************************************************************/
/*
 *这里是每次分配一点，然后不free，然后接着分配直至无法分配，得到的结果是几百T，这是因为每次malloc操作系统可以分配实际上不存在的页给malloc，因为这些分配的空间并没有真正的使用，只有真正使用的时候操作系统才会去真正的分配内存，一般都是用多少分配多少（以页为单位）
 *malloc一次能分配的最大内存见3.2.c,结果约等于2G，这可能是虚拟地址空间对堆大小的限制，malloc一次分配的内存一定是连续的（虚拟地址空间上连续）
 *
 */

#include<stdlib.h>
#include<stdio.h>

#define N 1024

int main()
{
    unsigned long long size = N;

    while (1){
        void *p;
        if (p = malloc(size)){
            free(p);
            size *= N;
        }
        else{
            break;
        }
    }

    size /= N;
    printf("%llu\n", size);
    
    unsigned long long full = 0;

    while (size){
        void *p;
        if (p = malloc(size)){
            full += size;
            printf("%llu\n", full);
        }
        else{
            size /= N;
        }
    }

    printf("%llu\n", full);

}
